var pomelo = require('pomelo');

/**
 * Init app for client.
 */
var app = pomelo.createApp();
app.set('name', 'CardServer');

app.configure("production|developemnt", function(){
    //这个filter中，一旦检测到node.js中事件循环的请求等待队列过长，超过一个阀值时，就会触发toobusy。
    // 一旦触发了toobusy，那么toobusy的filter中将终止此请求处理链，并在next调用中，传递错误参数。
    app.before(pomelo.filters.toobusy());
    //打开系统检测，其实就是注册了很多modules来监测系统的运行情况，详细的部分请查阅源码
    app.enable("systemMonitor");
    //配置代理
    app.set("proxyConfig", {
        cacheMsg : true,
        interval: 30,
        lazyConnection: true
        //enableRpcLog: true
    });
    //远程配置
    app.set("remoteConfig", {
        cacheMsg: true,
        interval: 30
    });

    //路由配置
    app.route("connector", routeUtil.connector);
    //数据库
    app.loadConfig("mysql", app.getBase() + "/../shared/config/mysql.json");
    app.filter(pomelo.filters.timeout());

    //配置授权服务器
    app.configure("production|developmen", "auth", function(){
        //加载session配置
        app.set("session", require("./config/session.json"));
    });
});
//配置数据库
app.configure("production|development", "connector", function(){
    var dbclient = require("./app/DB/mysql/mysql").init(app);
    app.set("dbclient", dbclient);

    app.use(sync, {sync: {path:__dirname + "/app/DB/mapping", dbclient: dbclient}});
});
//// app configuration
//app.configure('production|development', 'connector', function(){
//  app.set('connectorConfig',
//    {
//      connector : pomelo.connectors.hybridconnector,
//      heartbeat : 3,
//      useDict : true,
//      useProtobuf : true
//    });
//});

// start app
app.start();

process.on('uncaughtException', function (err) {
  console.error(' Caught exception: ' + err.stack);
});
